﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using FuncionarioMalFeito;
using FuncionarioRefatorado;


namespace Refatoracao
{
	class Program
	{
		static void Main(string[] args)
		{
			Funcionario joao = new Funcionario("João", ContratacaoTipo.CLT);
			Funcionario paulo = new Funcionario("Paulo", ContratacaoTipo.PJ);
			Funcionario pedro = new Funcionario("Pedro", ContratacaoTipo.CargoConfianca);
			Funcionario bruno = new Funcionario("Bruno", ContratacaoTipo.Estagiario);

			ImprimeNomeSalario(joao);
			ImprimeNomeSalario(paulo);
			ImprimeNomeSalario(pedro);
			ImprimeNomeSalario(bruno);

			Console.WriteLine("-----------------------------");

			#region Instanciação
			FuncionarioBase joaoCLT = FuncionarioFabrica.CriarFuncionarioPorContratacao("João CLT", Contratacao.CLT);
			FuncionarioBase pauloPJ = FuncionarioFabrica.CriarFuncionarioPorContratacao("Paulo PJ", Contratacao.PJ);
			FuncionarioBase pedroCargo = FuncionarioFabrica.CriarFuncionarioPorContratacao("Pedro Cargo", Contratacao.CargoConfianca);
			FuncionarioBase brunoEscravo = FuncionarioFabrica.CriarFuncionarioPorContratacao("Bruno Estagiario", Contratacao.Estagiario); 
			#endregion

			ImprimeNomeSalario(joaoCLT);
			ImprimeNomeSalario(pauloPJ);
			ImprimeNomeSalario(pedroCargo);
			ImprimeNomeSalario(brunoEscravo);



			#region TryParser
			string txtIdade = "aa";

			int idade = 0;
			int.TryParse(txtIdade, out idade);
			pauloPJ.Idade = idade;

			pauloPJ.Idade = txtIdade.TryParser<int>(); 
			#endregion

			#region ValueOrNull
			string txtNaturalidade = "Fortaleza";

			string naturalidade = null;
			if (!string.IsNullOrEmpty(txtNaturalidade))
				naturalidade = txtNaturalidade;

			pauloPJ.Naturalidade = txtNaturalidade.ValueOrNull(); 
			#endregion

			Console.ReadKey();
		}

		private static void ImprimeNomeSalario(FuncionarioBase funcionario)
		{
			Console.WriteLine(string.Format("Nome: {0} - Salário: {1}",
				funcionario.Nome, funcionario.CalculaPagamento()));
		}

		private static void ImprimeNomeSalario(Funcionario funcionario)
		{
			Console.WriteLine(string.Format("Nome: {0} - Salário: {1}",
				funcionario.Nome, funcionario.CalculaPagamento()));
		}
	}
}
